package com.ywl.designpattern.segregation;

/**
 * 使用接口隔离原则改进
 */
public class Segregation2 {

    public static void main(String[] args) {
        A2 a2 = new A2();
        a2.depend1(new B2()); // 类A通过接口是依赖类B
        a2.depend2(new B2());
        a2.depend3(new B2());

        C2 c2 = new C2();
        c2.depend1(new D2()); // 类C通过接口是依赖类D
        c2.depend4(new D2());
        c2.depend5(new D2());
    }
}
// 接口1
interface Interface11 {
    void operation1();

}

// 接口2
interface Interface2 {
    void operation2();

    void operation3();
}

// 接口3
interface Interface3 {
    void operation4();

    void operation5();
}

class B2 implements Interface11, Interface2 {
    public void operation1() {
        System.out.println("B 实现了 operation1");
    }

    public void operation2() {
        System.out.println("B 实现了 operation2");
    }

    public void operation3() {
        System.out.println("B 实现了 operation3");
    }

}

class D2 implements Interface11, Interface3 {
    public void operation1() {
        System.out.println("D 实现了 operation1");
    }

    public void operation4() {
        System.out.println("D 实现了 operation4");
    }

    public void operation5() {
        System.out.println("D 实现了 operation5");
    }
}

class A2 { // A 类通过接口Interface1,Interface2 依赖(使用) B类，但是只会用到1,2,3方法
    public void depend1(Interface11 i) {
        i.operation1();
    }

    public void depend2(Interface2 i) {
        i.operation2();
    }

    public void depend3(Interface2 i) {
        i.operation3();
    }
}

class C2 { // C 类通过接口Interface1,Interface3 依赖(使用) D类，但是只会用到1,4,5方法
    public void depend1(Interface11 i) {
        i.operation1();
    }

    public void depend4(Interface3 i) {
        i.operation4();
    }

    public void depend5(Interface3 i) {
        i.operation5();
    }
}